package com.spgf.view.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;
import org.primefaces.model.chart.PieChartModel;

import com.archtecture.control.enums.Arquivo;
import com.archtecture.control.exceptions.NegocioException;
import com.archtecture.view.utils.UtilSession;
import com.archtecture.view.utils.UtilWeb;
import com.spgf.control.enums.Mes;
import com.spgf.control.enums.ParametroSessao;
import com.spgf.control.enums.TipoCobranca;
import com.spgf.control.facedes.VisualizarRecursosFacadeRemote;
import com.spgf.control.models.Categoria;
import com.spgf.control.models.Lancamento;

@ManagedBean(name = "visualizarLancamentosMB")
@ViewScoped
public class VisualizarLancamentosMB implements Serializable {

	/**
	 * 
	 */
	private static final long				serialVersionUID	= -5141122884122359202L;

	private Lancamento						lancamento;

	private Integer							valorMaximoGraficoBarras;

	private Mes								mes;

	@EJB
	private VisualizarRecursosFacadeRemote	visualizarRecursosFacade;

	public void cancelar() {
		lancamento = null;
	}

	public void deletar() {

		// try {
		// // AcaoPersistenceGenerica.remover(getLancamento());
		// UtilWeb.enviarMensagem(FacesMessage.SEVERITY_INFO, Mensagem.SUCESSO_DELETAR);
		//
		// } catch (NegocioException e) {
		// UtilWeb.enviarMensagem(FacesMessage.SEVERITY_ERROR, e.getMensagemErro());
		// }

		lancamento = null;
	}

	public void editarLancamento(ActionEvent event) {

		try {
			UtilSession.colocarModeloSessao(ParametroSessao.CODIGO_LANCAMENTO, getLancamento().getCodigo());
		} catch (NegocioException e) {
			UtilWeb.enviarMensagem(FacesMessage.SEVERITY_ERROR, e.getMensagemErro());
		}
	}

	public CartesianChartModel getCartesianChartModel() {

		CartesianChartModel cartesianChartModel;
		cartesianChartModel = new CartesianChartModel();

		List<ChartSeries> seriesList = new ArrayList<ChartSeries>();
		// for (Categoria categoria : getCategorias()) {
		//
		// valorMaximoGraficoBarras = getValorMaximoGraficoBarras() <= categoria.getValor() ? categoria.getValor().intValue() + 10
		// : getValorMaximoGraficoBarras();
		//
		// ChartSeries serie = new ChartSeries(categoria.getNome());
		// SimpleDateFormat simple = new SimpleDateFormat("MMMMM");
		// serie.set(simple.format(Calendar.getInstance().getTime()), categoria.getValor());
		// seriesList.add(serie);
		// }

		ChartSeries serie = new ChartSeries("Apurado");
		ChartSeries serie2 = new ChartSeries("Esperado");

		for (Categoria categoria : getCategorias()) {

			valorMaximoGraficoBarras = getValorMaximoGraficoBarras() <= categoria.getValor() ? categoria.getValor().intValue() + 10
					: getValorMaximoGraficoBarras();

			serie.set(categoria.getNome(), categoria.getValor());

			serie2.set(categoria.getNome(), 1000);


		}
		seriesList.add(serie);
		seriesList.add(serie2);

		for (ChartSeries chartSeries : seriesList) {
			cartesianChartModel.addSeries(chartSeries);
		}

		return cartesianChartModel;
	}

	public List<Categoria> getCategorias() {
		return visualizarRecursosFacade.buscarCategriasPorMes(getMes(), TipoCobranca.DEBITO);
	}

	public Lancamento getLancamento() {
		if (lancamento == null) {
			lancamento = new Lancamento();
		}
		return lancamento;
	}

	public List<Lancamento> getLancamentos() {
		// return SQLControl.buscarLancamentosMes(getMes(), TipoCobranca.DEBITO);
		return null;
	}

	public Mes getMes() {
		if (mes == null) {
			mes = Mes.values()[Calendar.getInstance().get(Calendar.MONTH)];
		}
		return mes;
	}

	public List<SelectItem> getMeses() {
		List<SelectItem> meses = new ArrayList<SelectItem>();
		for (Mes mes : Mes.values()) {
			SelectItem item = new SelectItem(mes, UtilWeb.obterTextoArquivo(Arquivo.LABELS, mes.name()));
			meses.add(item);
		}
		return meses;
	}

	public PieChartModel getPieChartModel() {
		PieChartModel pieChartModel = new PieChartModel();
		for (Categoria categoria : getCategorias()) {
			pieChartModel.set(categoria.getNome(), categoria.getValor());
		}
		return pieChartModel;
	}

	/**
	 * @return the valorMaximoGraficoBarras
	 */
	public Integer getValorMaximoGraficoBarras() {
		if (valorMaximoGraficoBarras == null) {
			valorMaximoGraficoBarras = 0;
		}
		return valorMaximoGraficoBarras;
	}

	public Double getValorTotal() {
		Double valorTotal = 0.0;
		for (Lancamento lancamento : getLancamentos()) {
			valorTotal += lancamento.getValor();
		}
		return valorTotal;
	}

	public void setLancamento(Lancamento lancamento) {
		this.lancamento = lancamento;
	}

	public void setMes(Mes mes) {
		this.mes = mes;
	}

}
